home *** CD-ROM | disk | FTP | other *** search
/ Aminet 28 / Aminet 28 (1998)(GTI - Schatztruhe)[!][Dec 1998].iso / Aminet / dev / c / qtools0.2-src.lha / src / util / vispatch.c < prev   
Encoding:
C/C++ Source or Header  |  1998-07-13  |  7.5 KB  |  182 lines

  1. #include <libqtools.h>
  2.  
  3. int main(int argc, char **agrv)
  4. {
  5.   char BSPmatch[] = "e1m1.bsp\0";
  6.   char nameBSPold[] = "Quake:id1/maps/e1m1.bsp\0";
  7.   char nameBSPnew[] = "Quake:id1/maps/e1m12.bsp\0";
  8.   char nameVIS[] = "DH3:id1.vis\0";
  9.   FILE *fileBSPold = fopen(nameBSPold, READ_BINARY);
  10.   FILE *fileBSPnew = fopen(nameBSPnew, WRITE_BINARY_NEW);
  11.   FILE *fileVIS = fopen(nameVIS, READ_BINARY);
  12.   struct bspheader bspHeaderOld;
  13.   struct bspheader bspHeaderNew;
  14.   struct visdata visData;
  15.  
  16.   if ((!fileBSPold) || (!fileBSPnew) || (!fileVIS)) {
  17.     printf("cannot open!\n");
  18.     return 0;
  19.   }
  20.   EndianInit();
  21.  
  22.   fread(&bspHeaderOld, 1, sizeof(struct bspheader), fileBSPold);
  23.   memcpy(&bspHeaderNew, &bspHeaderOld, sizeof(struct bspheader));
  24.   fwrite(&bspHeaderNew, 1, sizeof(struct bspheader), fileBSPnew);
  25.  
  26.   while (fread(&visData, 1, sizeof(struct visdata), fileVIS)) {
  27.     if (!strncmp(visData.procName, BSPmatch, 32)) {
  28.       void *memory;
  29.  
  30.       printf("found %s ...\n", visData.procName);
  31.  
  32.       bspHeaderNew.entities.offset = LittleLong(ftell(fileBSPnew));
  33.       bspHeaderNew.entities.size = bspHeaderOld.entities.size;
  34.       if ((memory = malloc(LittleLong(bspHeaderOld.entities.size)))) {
  35.     fseek(fileBSPold, LittleLong(bspHeaderOld.entities.offset), SEEK_SET);
  36.     fread(memory, 1, LittleLong(bspHeaderOld.entities.size), fileBSPold);
  37.     fwrite(memory, 1, LittleLong(bspHeaderNew.entities.size), fileBSPnew);
  38.     free(memory);
  39.       }
  40.  
  41.       bspHeaderNew.planes.offset = LittleLong(ftell(fileBSPnew));
  42.       bspHeaderNew.planes.size = bspHeaderOld.planes.size;
  43.       if ((memory = malloc(LittleLong(bspHeaderOld.planes.size)))) {
  44.     fseek(fileBSPold, LittleLong(bspHeaderOld.planes.offset), SEEK_SET);
  45.     fread(memory, 1, LittleLong(bspHeaderOld.planes.size), fileBSPold);
  46.     fwrite(memory, 1, LittleLong(bspHeaderNew.planes.size), fileBSPnew);
  47.     free(memory);
  48.       }
  49.  
  50.       bspHeaderNew.miptex.offset = LittleLong(ftell(fileBSPnew));
  51.       bspHeaderNew.miptex.size = bspHeaderOld.miptex.size;
  52.       if ((memory = malloc(LittleLong(bspHeaderOld.miptex.size)))) {
  53.     fseek(fileBSPold, LittleLong(bspHeaderOld.miptex.offset), SEEK_SET);
  54.     fread(memory, 1, LittleLong(bspHeaderOld.miptex.size), fileBSPold);
  55.     fwrite(memory, 1, LittleLong(bspHeaderNew.miptex.size), fileBSPnew);
  56.     free(memory);
  57.       }
  58.  
  59.       bspHeaderNew.vertices.offset = LittleLong(ftell(fileBSPnew));
  60.       bspHeaderNew.vertices.size = bspHeaderOld.vertices.size;
  61.       if ((memory = malloc(LittleLong(bspHeaderOld.vertices.size)))) {
  62.     fseek(fileBSPold, LittleLong(bspHeaderOld.vertices.offset), SEEK_SET);
  63.     fread(memory, 1, LittleLong(bspHeaderOld.vertices.size), fileBSPold);
  64.     fwrite(memory, 1, LittleLong(bspHeaderNew.vertices.size), fileBSPnew);
  65.     free(memory);
  66.       }
  67.  
  68.       bspHeaderNew.visilist.offset = LittleLong(ftell(fileBSPnew));
  69.       fread(&bspHeaderNew.visilist.size, 1, sizeof(int), fileVIS);
  70.  
  71.       if ((memory = malloc(LittleLong(bspHeaderNew.visilist.size)))) {
  72.     fread(memory, 1, LittleLong(bspHeaderNew.visilist.size), fileVIS);
  73.     fwrite(memory, 1, LittleLong(bspHeaderNew.visilist.size), fileBSPnew);
  74.     free(memory);
  75.       }
  76.  
  77.       bspHeaderNew.nodes.offset = LittleLong(ftell(fileBSPnew));
  78.       bspHeaderNew.nodes.size = bspHeaderOld.nodes.size;
  79.       if ((memory = malloc(LittleLong(bspHeaderOld.nodes.size)))) {
  80.     fseek(fileBSPold, LittleLong(bspHeaderOld.nodes.offset), SEEK_SET);
  81.     fread(memory, 1, LittleLong(bspHeaderOld.nodes.size), fileBSPold);
  82.     fwrite(memory, 1, LittleLong(bspHeaderNew.nodes.size), fileBSPnew);
  83.     free(memory);
  84.       }
  85.  
  86.       bspHeaderNew.texinfo.offset = LittleLong(ftell(fileBSPnew));
  87.       bspHeaderNew.texinfo.size = bspHeaderOld.texinfo.size;
  88.       if ((memory = malloc(LittleLong(bspHeaderOld.texinfo.size)))) {
  89.     fseek(fileBSPold, LittleLong(bspHeaderOld.texinfo.offset), SEEK_SET);
  90.     fread(memory, 1, LittleLong(bspHeaderOld.texinfo.size), fileBSPold);
  91.     fwrite(memory, 1, LittleLong(bspHeaderNew.texinfo.size), fileBSPnew);
  92.     free(memory);
  93.       }
  94.  
  95.       bspHeaderNew.faces.offset = LittleLong(ftell(fileBSPnew));
  96.       bspHeaderNew.faces.size = bspHeaderOld.faces.size;
  97.       if ((memory = malloc(LittleLong(bspHeaderOld.faces.size)))) {
  98.     fseek(fileBSPold, LittleLong(bspHeaderOld.faces.offset), SEEK_SET);
  99.     fread(memory, 1, LittleLong(bspHeaderOld.faces.size), fileBSPold);
  100.     fwrite(memory, 1, LittleLong(bspHeaderNew.faces.size), fileBSPnew);
  101.     free(memory);
  102.       }
  103.  
  104.       bspHeaderNew.lightmaps.offset = LittleLong(ftell(fileBSPnew));
  105.       bspHeaderNew.lightmaps.size = bspHeaderOld.lightmaps.size;
  106.       if ((memory = malloc(LittleLong(bspHeaderOld.lightmaps.size)))) {
  107.     fseek(fileBSPold, LittleLong(bspHeaderOld.lightmaps.offset), SEEK_SET);
  108.     fread(memory, 1, LittleLong(bspHeaderOld.lightmaps.size), fileBSPold);
  109.     fwrite(memory, 1, LittleLong(bspHeaderNew.lightmaps.size), fileBSPnew);
  110.     free(memory);
  111.       }
  112.  
  113.       bspHeaderNew.clipnodes.offset = LittleLong(ftell(fileBSPnew));
  114.       bspHeaderNew.clipnodes.size = bspHeaderOld.clipnodes.size;
  115.       if ((memory = malloc(LittleLong(bspHeaderOld.clipnodes.size)))) {
  116.     fseek(fileBSPold, LittleLong(bspHeaderOld.clipnodes.offset), SEEK_SET);
  117.     fread(memory, 1, LittleLong(bspHeaderOld.clipnodes.size), fileBSPold);
  118.     fwrite(memory, 1, LittleLong(bspHeaderNew.clipnodes.size), fileBSPnew);
  119.     free(memory);
  120.       }
  121.  
  122.       bspHeaderNew.leaves.offset = LittleLong(ftell(fileBSPnew));
  123.       fread(&bspHeaderNew.leaves.size, 1, sizeof(int), fileVIS);
  124.  
  125.       if ((memory = malloc(LittleLong(bspHeaderNew.leaves.size)))) {
  126.     fread(memory, 1, LittleLong(bspHeaderNew.leaves.size), fileVIS);
  127.     fwrite(memory, 1, LittleLong(bspHeaderNew.leaves.size), fileBSPnew);
  128.     free(memory);
  129.       }
  130.  
  131.       bspHeaderNew.lface.offset = LittleLong(ftell(fileBSPnew));
  132.       bspHeaderNew.lface.size = bspHeaderOld.lface.size;
  133.       if ((memory = malloc(LittleLong(bspHeaderOld.lface.size)))) {
  134.     fseek(fileBSPold, LittleLong(bspHeaderOld.lface.offset), SEEK_SET);
  135.     fread(memory, 1, LittleLong(bspHeaderOld.lface.size), fileBSPold);
  136.     fwrite(memory, 1, LittleLong(bspHeaderNew.lface.size), fileBSPnew);
  137.     free(memory);
  138.       }
  139.  
  140.       bspHeaderNew.edges.offset = LittleLong(ftell(fileBSPnew));
  141.       bspHeaderNew.edges.size = bspHeaderOld.edges.size;
  142.       if ((memory = malloc(LittleLong(bspHeaderOld.edges.size)))) {
  143.     fseek(fileBSPold, LittleLong(bspHeaderOld.edges.offset), SEEK_SET);
  144.     fread(memory, 1, LittleLong(bspHeaderOld.edges.size), fileBSPold);
  145.     fwrite(memory, 1, LittleLong(bspHeaderNew.edges.size), fileBSPnew);
  146.     free(memory);
  147.       }
  148.  
  149.       bspHeaderNew.ledges.offset = LittleLong(ftell(fileBSPnew));
  150.       bspHeaderNew.ledges.size = bspHeaderOld.ledges.size;
  151.       if ((memory = malloc(LittleLong(bspHeaderOld.ledges.size)))) {
  152.     fseek(fileBSPold, LittleLong(bspHeaderOld.ledges.offset), SEEK_SET);
  153.     fread(memory, 1, LittleLong(bspHeaderOld.ledges.size), fileBSPold);
  154.     fwrite(memory, 1, LittleLong(bspHeaderNew.ledges.size), fileBSPnew);
  155.     free(memory);
  156.       }
  157.  
  158.       bspHeaderNew.models.offset = LittleLong(ftell(fileBSPnew));
  159.       bspHeaderNew.models.size = bspHeaderOld.models.size;
  160.       if ((memory = malloc(LittleLong(bspHeaderOld.models.size)))) {
  161.     fseek(fileBSPold, LittleLong(bspHeaderOld.models.offset), SEEK_SET);
  162.     fread(memory, 1, LittleLong(bspHeaderOld.models.size), fileBSPold);
  163.     fwrite(memory, 1, LittleLong(bspHeaderNew.models.size), fileBSPnew);
  164.     free(memory);
  165.       }
  166.  
  167.       fseek(fileBSPnew, 0, SEEK_SET);
  168.       fwrite(&bspHeaderNew, 1, sizeof(struct bspheader), fileBSPnew);
  169.  
  170.       break;
  171.     }
  172.     else {
  173.       printf("skipping %s (%d bytes) ...\n", visData.procName, LittleLong(visData.size));
  174.       fseek(fileVIS, LittleLong(visData.size), SEEK_CUR);
  175.     }
  176.   }
  177.  
  178.   fclose(fileBSPold);
  179.   fclose(fileBSPnew);
  180.   fclose(fileVIS);
  181. }
  182.